import { byteToString } from "../utils/index"; // 工具函数

let unit8Arr = []; // byte数组
let fullContentArr = []; // 完整的消息数组byte
/**
 * @param {buffer} ArrayBuffer 字节数组
 */
function doReceive(buffer) {
  unit8Arr = unit8Arr.concat(Array.from(new Uint8Array(buffer)));
  // 处理byte数组
  let magicNum = unit8Arr.slice(0, 4).join(""); // 魔术值
  let version = unit8Arr.slice(4, 5).join(""); // 版本数
  let qsWay = unit8Arr.slice(5, 6).join(""); // 序列表方式
  let msgType = unit8Arr.slice(6, 7).join(""); // 消息类型
  let uuidArry = unit8Arr.slice(7, 39).map((item) => {
    return String.fromCharCode(item);
  });
  let uuid = uuidArry.join(""); // uuid
  // 内容长度数组
  let contentLengthArr = unit8Arr.slice(40, 44).map((item) => {
    let temp = parseInt(item).toString(2);
    1;
    let length = temp.length;
    if (temp.length <= 8) {
      //补全位数 0000，这里我要显示8位
      for (var i = 0; i < 8 - length; i++) {
        temp = "0" + temp; //不够的就在前面补0
      }
    }
    return temp;
  });

  let contentLength = parseInt(contentLengthArr.join(""), 2); // 内容长度

  let contentArr = unit8Arr.slice(44, unit8Arr.length); // 内容buffer

  fullContentArr = [...contentArr];

  // console.log("魔术值:", magicNum);
  // console.log("版本数:", version);
  // console.log("序列化方式:", qsWay);
  // console.log("消息类型:", msgType);
  // console.log("uuid:", uuid);
  // console.log("内容长度", contentLength);
  // console.log("实际内容长度:", contentArr.length);

  // 如果内容长度与真正内容数组不一致
  if (contentLength !== contentArr.length) {
    return;
  } else {
    let contentStr = byteToString(fullContentArr); // 完整消息字符串
    fullContentArr = []; // 内容字节数组
    unit8Arr = []; // buffer数组
    let data = {
      magicNum: magicNum,
      version: version,
      qsWay: qsWay,
      msgType: msgType,
      uuid: uuid,
      contentLength: contentLength,
      body: JSON.parse(contentStr),
    };
    console.log("接收到的消息:", data);
    return Promise.resolve(data);
  }
}
export { doReceive };
